<!--
 * @Author: your name
 * @Date: 2022-01-19 21:02:46
 * @LastEditTime: 2022-01-20 21:03:04
 * @LastEditors: Please set LastEditors
 * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \01.React入门\code\07.组件实例三大属性之state\01.state的基本使用.html
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>state的基本使用</title>
    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>
</head>

<body>
    <div id="app"></div>
    <script type="text/babel">
        // 定义一个 Weather 组件
        class Weather extends React.Component {
            constructor(props) {
                super(props);
                this.state = { isHot: true } // 初始化状态
                //给实例自身追加一个同名的 changeWeather 方法，这个方法是根据原型上的 changeWeather 使用 bind 改变 this 指向生成的
                this.changeWeather = this.changeWeather.bind(this)
            }

            // 渲染方法，必须要写
            render() {
                console.log(this);
                const { isHot } = this.state
                return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'}</h1>
            }

            // 自己定义的事件回调函数
            changeWeather() {
                /*
                    changeWeather() 是放在哪儿的？ Weather的原型对象上，供实例使用。
                    changeWeather() 中的this是谁？ 如果 show() 是通过 Weather 实例调用，那么 this 就是 Weather 的实例对象。
                                                  如果直接调用（作为事件的回调函数时即直接调用），类中方法开启了严格模式，this指向 undefined。
                 */
                console.log(this)
                //this.state.isHot = false // 直接对 state 进行操作是不能响应到组件的，需要使用 setState() 对 state 内的值进行修改
                const isHot = this.state.isHot
                this.setState({
                    isHot: !isHot // 取反赋值
                })
            }
        }
        ReactDOM.render(<Weather />, document.querySelector('#app'))

    </script>
</body>

</html>